var fs = require('fs');  
var ejs = require('ejs');  
var mysql = require('mysql');  
var express = require('express');  
var bodyParser = require('body-parser');  
var cookieParser = require('cookie-parser');  

// 连接MySQL数据库  
var client = mysql.createConnection({  
    host: 'localhost',  
    port: "3306",  
    user: 'root',  
    password: 'yyyy6767',  
    database: 'salary'  
});  

// 判断数据库连接是否成功  
client.connect(function (err) {  
    if (err) {  
        console.log('[query] - :' + err);  
        return;  
    }  
    console.log('[connection connect]  MySQL数据库连接成功!');  
});  

// 创建服务器  
var app = express();  
app.use(bodyParser.urlencoded({ extended: false }));  
app.use(cookieParser());  

// 启动服务器  
app.listen(52273, function () {  
    console.log('服务器运行在 http://127.0.0.1:52273');  
});  

// 显示登录页面  
app.get('/', function (request, response) {  
    // 读取登录模板文件  
    fs.readFile('login.html', 'utf8', function (error, data) {  
        response.send(data);  
    });  
});  

// 处理登录  
app.post('/login', function (request, response) {  
    var username = request.body.username;  
    var password = request.body.password;  

    // 这里应该用数据库验证用户名和密码  
    // 为了演示，这里使用硬编码的值。  
    if (username === 'wjy' && password === '2') {  
        // 创建一个会话  
        response.cookie('user', username); // 简单的基于cookie的身份验证  
        response.redirect('/list'); // 重定向到书籍列表  
    } else {  
        response.send('您的用户信息输入有误，点击<a href="/">重新尝试</a>回到登录界面');  
    }  
});
//注册  
app.get('/register', function (request, response) {  
    fs.readFile('register.html', 'utf8', function (error, data) {  
        if (error) {  
            return response.status(500).send('模板无法读取');  
        }  
        response.send(data);  
    });  
});  
app.post('/register', function(request, response) {  
    var username = request.body.username;  
    var password = request.body.password;  

    // 执行SQL语句,将用户信息插入到数据库  
    client.query('INSERT INTO users (username, password) VALUES (?, ?)', [username, password], function(error, result) {  
        if (error) {  
            console.log(error);  
            response.redirect('/register');  
        } else {  
            response.redirect('/');  
        }  
    });  
});
// 显示信息列表  
app.get('/list', function (request, response) {  
    // 检查用户是否已认证  
    if (!request.cookies.user) {  
        return response.redirect('/'); // 用户未认证，重定向到登录页面  
    }  
    // 读取工资列表模板文件  
fs.readFile('list.html', 'utf8', function (error, data) {  
        client.query('SELECT * FROM salary', function (error, results) {  
            response.send(ejs.render(data, {  
                data: results  
            }));  
        });  
    });  
});  

// 显示信息插入页面  
app.get('/insert', function (request, response) {  
    fs.readFile('insert.html', 'utf8', function (error, data) {  
        response.send(data);  
    });  
});  

// 处理信息插入  
app.post('/insert', function (request, response) {  
    var body = request.body;  

    // 输出接收到的 body 数据，以便检查  
    console.log("接收到的请求数据:", body);  

    client.query('INSERT INTO salary (day, name, idnumber, salary, reward, phonenumber) VALUES (?, ?, ?, ?, ?, ?)', [  
        body.day, body.name, body.idnumber, parseFloat(body.salary), parseFloat(body.reward), body.phonenumber   
    ], function (error, results) {  
        if (error) {  
            console.error('插入数据时出错:', error); // 打印错误信息  
            response.status(500).send('插入数据时出错'); // 发送出错响应  
            return; // 返回出错信息  
        }  
        response.redirect('/list'); // 成功后重定向到书籍列表  
    });  
});    

// 显示信息编辑页面  
app.get('/edit/:id', function (request, response) {  
    fs.readFile('edit.html', 'utf8', function (error, data) {  
        client.query('SELECT * FROM salary WHERE id = ?', [request.params.id], function (error, result) {  
            response.send(ejs.render(data, {  
                data: result[0]  
            }));  
        });  
    });  
});  

// 处理信息编辑  
app.post('/edit/:id', function (request, response) {  
    var body = request.body;  
    client.query('UPDATE salary SET day=? ,name=? ,idnumber=? ,salary=? ,reward=? ,phonenumber=?  WHERE id=?',  
        [body.day,body.name,body.idnumber,body.salary,body.reward,body.phonenumber, request.params.id], function () {  
            response.redirect('/list'); // 成功后重定向到书籍列表  
        });  
});  

// 处理信息删除  
app.get('/delete/:id', function (request, response) {  
    client.query('DELETE FROM salary WHERE id=?', [request.params.id], function () {  
        response.redirect('/list');  
    });  
});  


// 查询数据的路由
app.get('/search', function (request, response) {  
    var query = request.query.query;  

    // 检查查询条件是否存在  
    if (!query) {  
        return response.redirect('/insert'); // 若没有提供查询条件，重定向至主页  
    }  

    // 使用 LIKE 关键字进行模糊匹配，假设我们查询的是 salary 表  
    var sqlQuery = 'SELECT * FROM salary WHERE name LIKE ?';  
    var searchParams = [`%${query}%`];  

    // 执行数据库查询  
    client.query(sqlQuery, searchParams, function (error, results) { // 更正为 client  
        if (error) {  
            console.error('[SQL Query Error]: ', error);  
            return response.status(500).send('Error fetching data from the database');  
        }  

        // 读取HTML模板文件  
        fs.readFile('list.html', 'utf8', function (readError, templateData) {  
            if (readError) {  
                console.error('[File Read Error]: ', readError);  
                return response.status(500).send('Error reading the HTML template file');  
            }  

            // 使用EJS渲染模板并传递数据  
            try {  
                var renderedHtml = ejs.render(templateData, {  
                    data: results // 将查询结果传递给前端  
                });  
                response.send(renderedHtml);  
            } catch (ejsError) {  
                console.error('[EJS Render Error]: ', ejsError);  
                return response.status(500).send('Error rendering the EJS template');  
            }  
        });  
    });  
});  
